package cn.ivicar.iov.util;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

//import de.innosystec.unrar.NativeStorage;
//import de.innosystec.unrar.NativeStorage;
//import de.innosystec.unrar.NativeStorage;

//import de.innosystec.unrar.Archive;
//import de.innosystec.unrar.rarfile.FileHeader;

public class DeCompressUtil {
    /**
     * 解压zip格式压缩包
     * 对应的是ant.jar
     */
    private static void unzip(String sourceZip,String destDir) throws Exception{
        try{
            Project p = new Project();
            Expand e = new Expand();
            e.setProject(p);
            e.setSrc(new File(sourceZip));
            e.setOverwrite(false);
            e.setDest(new File(destDir));
           /*
           ant下的zip工具默认压缩编码为UTF-8编码，
           而winRAR软件压缩是用的windows默认的GBK或者GB2312编码
           所以解压缩时要制定编码格式
           */
            e.setEncoding("utf8");
            e.execute();
        }catch(Exception e){
            throw e;
        }
    }
    /**
     * 解压rar格式压缩包。
     * 对应的是java-unrar-0.3.jar，但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar
     */
    private static void unrar(String sourceRar,String destDir) throws Exception{
//        Archive a = null;
//        FileOutputStream fos = null;
//        try{
//            a = new Archive(new NativeStorage(new File(sourceRar)));
//            FileHeader fh = a.nextFileHeader();
//            while(fh!=null){
//                if(!fh.isDirectory()){
//                    //1 根据不同的操作系统拿到相应的 destDirName 和 destFileName
//                    String compressFileName = fh.getFileNameString().trim();
//                    String destFileName = "";
//                    String destDirName = "";
//                    //非windows系统
//                    if(File.separator.equals("/")){
//                        destFileName = destDir + compressFileName.replaceAll("\\\\", "/");
//                        destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));
//                        //windows系统
//                    }else{
//                        destFileName = destDir + compressFileName.replaceAll("/", "\\\\");
//                        destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));
//                    }
//                    //2创建文件夹
//                    File dir = new File(destDirName);
//                    if(!dir.exists()||!dir.isDirectory()){
//                        dir.mkdirs();
//                    }
//                    //3解压缩文件
//                    fos = new FileOutputStream(new File(destFileName));
//                    a.extractFile(fh, fos);
//                    fos.close();
//                    fos = null;
//                }
//                fh = a.nextFileHeader();
//            }
//            a.close();
//            a = null;
//        }catch(Exception e){
//            throw e;
//        }finally{
//            if(fos!=null){
//                try{fos.close();fos=null;}catch(Exception e){e.printStackTrace();}
//            }
//            if(a!=null){
//                try{a.close();a=null;}catch(Exception e){e.printStackTrace();}
//            }
//        }
    }
    /**
     * 解压缩
     */
    public static void deCompress(String sourceFile,String destDir) throws Exception{
        //保证文件夹路径最后是"/"或者"\"
        char lastChar = destDir.charAt(destDir.length()-1);
        if(lastChar!='/'&&lastChar!='\\'){
            destDir += File.separator;
        }
        //根据类型，进行相应的解压缩
        String type = sourceFile.substring(sourceFile.lastIndexOf(".")+1);
        System.out.println("deCompress:"+type);
        if(type.equals("zip")){
            DeCompressUtil.unzip(sourceFile, destDir);
        }else if(type.equals("rar")){
            DeCompressUtil.unrar(sourceFile, destDir);
        }else{
            throw new Exception("只支持zip和rar格式的压缩包！");
        }
    }

    /**
     * 获取文件夹所有文件名儿和文件夹的名儿
     * */

    public static List<String> getFiles(String path) {
        List<String> files = new ArrayList<String>();
        File file = new File(path);
        File[] tempList = file.listFiles();

        for (int i = 0; i < tempList.length; i++) {
            if (tempList[i].isFile()) {
//              System.out.println("文     件：" + tempList[i]);
                files.add(tempList[i].toString());
            }
            if (tempList[i].isDirectory()) {
//              System.out.println("文件夹：" + tempList[i]);
            }
        }
        return files;
    }


}